// import type { IPermission } from "@/apis/acl/menu/type";

interface IResDataBase {
  message: string;
  success: boolean | "ok";
}

interface IData {
  /** mongoDB数据库-id;type:Types/ObjectId,来自mongoose */
  _id?: string;
  /** 名称 */
  name: string;
}

/**
 * 常用数据返回类型；包括：增|删|改；
 * 但是查的数据返回类型不一样；
 */
export type ICommonDataRes<T = IResDataBase> = {
  /** 数据 */
  data: T;
  /** 返回码 */
  code: number;
  /** 消息 */
  message: string;
  /** 是否成功 */
  success: boolean;
};

/** 分页查询Data返回类型 */
export type IPigeQueryRes<T> = {
  data?: Array<T>;
  meta?: {
    currentPage?: number;
    itemPerPage?: number;
    totalItems?: number;
    totalPages?: number;
  };
};

/**
 * 数据基本类型接口
 */
export interface IDataBase extends IData {
  /** 创建时间 */
  createdAt?: string;
  /** 更新时间 */
  updatedAt?: string;
}

/** 树节点接口 */
// export interface ITreeNode extends IData {
//   /** 父id */
//   pid?: string;
//   /** 子节点 */
//   children?: ITreeNodes;
// }

/**
 * 全局数据
 */
// export interface IGlobalData {
//   /** 登入账号 */
//   username: string;
//   /** 账号id */
//   userId?: string;
//   /** 角色ids */
//   roleIds?: string[];
//   /** 权限ids */
//   permissionIds?: string[];
//   /** 权限树形集合 */
//   permissionTree?: IPermission[];
// }

/** 树节点接口 */
export type ITreeNode<T> = {
  [P in keyof T]: T[P];
} & {
  children?: Array<ITreeNode<T>>;
};

/**
 * 深度只读对象接口
 */
export type DeepReadonly<T> = {
  readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];
};
